package com.smedi.ismedi.organization.core.application.query;

import com.smedi.ismedi.organization.core.application.command.OrganizationListQueryCommand;
import com.smedi.ismedi.organization.core.application.command.OrganizationOneQueryCommand;
import com.smedi.ismedi.organization.core.application.query.vo.AllOrganizationVo;
import com.smedi.ismedi.organization.core.application.query.vo.HrOrganizationVo;
import com.smedi.ismedi.organization.core.domain.aggregatemodel.HrOrganization;
import com.smedi.ismedi.organization.core.domain.aggregatemodel.model.Organization;

import java.util.List;
import java.util.Map;

public interface HrOrganizationQueryService {
    HrOrganizationVo getHrOrganizationViewRoot();

    List<HrOrganization> getByHrOrganizationIds(List<Long> organizationIds);

    List<HrOrganizationVo> getAllHrOrganizationList();

    List<HrOrganizationVo> getHrOrganizationTree(Long hrOrganizationId);

    HrOrganizationVo getHrOrganizationView(Long hrOrganizationId);

    HrOrganizationVo getHrOrganizationViewWithTypeList(Long hrOrganizationId, List<String> typeList);

    List<Long> getHrOrganizationChildrenIdList(Long hrOrganizationId);

    Map<Long, String> getHrOrganizationChildrenMap(Long hrOrganizationId);

    List<HrOrganizationVo> getHrOrganizationByHrOrganizationIds(List<Long> hrOrganizationIds);

    List<HrOrganizationVo> queryHrOrganizationListByFullName(String fullName);

    List<HrOrganizationVo> queryHrOrganizationListByFullNameList(List<String> fullNameList);

    List<HrOrganizationVo> queryAllProjectManagementHROrganizationList();

    List<HrOrganizationVo> queryAllProjectManagementHROrganizationListNew();

    List<HrOrganizationVo> queryAllHROrganizationListByType(boolean isCompany, boolean isCompanyLeader, boolean isCompanyManagementOrganization, boolean isProjectManagementOrganization, boolean isSubordinateOrganization);

    HrOrganizationVo queryAllTopScopeHrOrganizations(List<Long> hrOrganizationIds, boolean showAll);

    List<Long> getParentHrOrganizationIdsByHrOrganizationId(Long hrOrganizationId);

    List<Long> getAllHrOrganizationIdsWhenYouAreInCompanyLevel(List<Long> internalAssignmentHrOrganizationIds);

    Organization getOrganizationOne(OrganizationOneQueryCommand organizationOneQueryCommand);

    List<Organization> getOrganizationList(OrganizationListQueryCommand organizationListQuerycommand);

    List<Organization> getOrganizationListWithoutToken(OrganizationListQueryCommand organizationListQuerycommand);

    List<AllOrganizationVo> getAllOrganizationVos(List<Long> ids);
}
